package janvee.com.example2;

import janvee.com.example2.common.Request;
import janvee.com.example2.common.Response;
import janvee.com.example2.common.ServletProcessor1;
import janvee.com.example2.common.StaticResourceProcessor;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer1 {


    public static final String WEB_ROOT =System.getProperty("user.dir") + File.separator + "webroot";
    // shutdown command
    private static final String SHUTDOWN_COMMAND = "/SHUTDOWN";
    // the shutdown command r
    private boolean shutdown = false;
    public static void main(String[] args) {
        HttpServer1 server = new HttpServer1();
        server.await();
    }
    public void await() {
        ServerSocket serverSocket = null;
        int port = 8080;

        try {
            serverSocket = new ServerSocket(port,1, InetAddress.getByName("127.0.0.1"));

        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
        System.out.println("服务："+serverSocket.getInetAddress().getHostAddress() +",端口："+serverSocket.getLocalPort()+"已启动!");
        while (!shutdown) {
            Socket socket = null;
            InputStream input = null;
            OutputStream output = null;

            try {
                socket = serverSocket.accept();
                System.err.println(" serverSocket.accept()");
                input = socket.getInputStream();
                output = socket.getOutputStream();
                // create Request object and parse
                Request request = new Request(input);
                request.parse();
                // create Response object
                Response response = new Response(output);
                response.setRequest(request);

                // check if this is a request for a servlet or
                // a static resource
                // a request for a servlet begins with "/servlet/"
                if(null != request.getUri()) {
                    if (request.getUri().startsWith("/servlet/")) {
                        ServletProcessor1 processor = new ServletProcessor1();
                        processor.process(request, response);
                    } else {
                        StaticResourceProcessor processor = new StaticResourceProcessor();
                        processor.process(request, response);
                    }
                    response.sendStaticResource();
                    shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
                } else {
                    System.err.println("request.getUri():"+request.getUri());
                }


                socket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}
